package Offer.offer;


import domain.ListNode;

/**
 * 在O1时间删除链表节点
 * @author leiwenkang
 * @date 2020/4/6
 */
public class Test13在O1时间删除链表节点 {
    public void deleteListNode(ListNode head, ListNode node) {
        if (head == null) {
            return;
        }
        //删除的是头节点，且链表只有一个头节点
        if (head.next == null && node == head) {
            head = null;
            return;
        }

        //删除的是尾结点，即node.next == null
        //只能遍历到该节点的上一个节点后删除
        if (node.next == null) {
            ListNode p = head;
            while (p.next != node) {
                p = p.next;
            }
            p.next = null;
            return;
        }

        //一般情况，删除节点的下一个节点，当然要先把下一个节点的值先赋值到本来要删除的节点上
        //前提是node有下一个节点
        node.val = node.next.val;
        node.next = node.next.next;
    }
}
